// object 不建议使用
// 接口：接口的作用就是为这些 *类型命名* 和为 *你的代码* 或 *第三方代码* 定义 *契约*。
// 1. 对象
export interface IPerson {
  // 必须属性
  name: string;
  sex: string;
  // 可选属性
  age?: number;
  // 只读属性
  readonly code: number;
  // 其它属性
  [propsName: string]: any;
}

const person: IPerson = {
  name: "张三",
  age: 18,
  sex: "男",
  code: 110,
  like: ["篮球"],
  eat: "米饭",
};

const person1: IPerson = {
  name: "小李",
  sex: "女",
  code: 120,
};

// 2. 函数

interface IFn {
  (x: number, y: number): number;
}

const fn: IFn = (x: number, y: number): number => {
  return x + y;
};

// 3. 可索引的类型
interface IArr {
  [porpsName: number]: string;
}

const arr: number[] = [1, 2, 3, 4];
const arr1: IArr = ["1", "2", "3"];

// 4. 类 类型
// interface IAnimal {
//   name: string
//   age: number
//   sex: string
// }

// class Animal implements IAnimal {
//   name: string = 'gou'
//   age: number = 18
//   sex: string

//   constructor() {
//     this.sex = 'NAN '
//   }
// }

// 5. 继承接口
interface Person {
  name: string;
  age: number;
  sex: string;
}

interface Man extends Person {
  face: string[]
}


const m: Man  = {
  name: 'zhanfgsan,',
  age: 18,
  sex: "男",
  face: ['短头发']
}